/**
 * @(#) CongMoneyWriteProxy.as
 *
 * @date		2009. 03. 19.
 * @version		1.0
 * @author		Park, Juneho
 * @description	 경조사 Proxy - Proxy
 * 				경조사  저장, 수정, 삭제한다.
 */
package com.skt.common_hr.congmoney_sac.model
{
	import com.skt.common_hr.common.Variables;
	import com.skt.common_hr.common.puremvc.CommonProxy;
	import com.skt.common_hr.congmoney_sac.CelebrationFacade;
	import com.skt.common_hr.congmoney_sac.model.vo.CelebrationCodeVO;
	import com.skt.common_hr.congmoney_sac.model.vo.ConMoneyCorseVO;
	import com.skt.common_hr.congmoney_sac.model.vo.CongMoneyWriteVO;
	import com.wcl.dataloader.*;
	import com.wcl.utils.DateUtil;
	import com.wcl.utils.StringUtil;

	import mx.collections.ArrayCollection;
	import mx.controls.Alert;
	import mx.managers.CursorManager;
	import mx.rpc.events.FaultEvent;
	import mx.rpc.events.ResultEvent;

	public class CongMoneyWriteProxy extends CommonProxy
	{
		public static const NAME:String = "CongMoneyWriteProxy";

		public var congLoadList:CongMoneyWriteVO;
		public var bnksaCorsn:ArrayCollection;			//계좌선택 콤보
		public var standardList:CelebrationCodeVO;	//지원기준
		public var corsnMoney:ConMoneyCorseVO;			//경조금액
		public var corsnMoneyResultMessage:String;		//경조사지원기준

		/**
		 * 생성자
		 *
		 * @param
		 * @return void
		 */
		public function CongMoneyWriteProxy(data:Object=null)
		{
			super(NAME, data);
		}


		/**
		 * data selectPopUp를 수행
		 * 		- DataLoader 를 생성하고 Import Parameter 객체를 생성, RFC를 호출
		 *
		 * @param pernr
		 * @return void
		 */
		public function load(key:String):void
		{
			var param:Object = new Object();
			param["I_GWAREKEY"] = key;

			if(key != "") {
				loadData("Z_HR_0047", param, loadResult, loadFault);
			}
		}

		//경조사입력
		public function save(gwarekey:String, key:String, vo:CongMoneyWriteVO, iHtml:String):void
		{

			var params:Object = new Object();
			params["I_GWAREKEY"] = (gwarekey == null) ? "" : gwarekey;
			params["I_SAVEGBN"]	= key;
			params["I_HTML"]	= (key=="1") ? "" : iHtml;
			params["I_XML"]		= (key=="1") ? "" : buildXML();


			var tables:Object = new Object();
			var table:Array = new Array();
			table.push(toJsonType(vo));
			tables["ITAB"] = table;
			trace(vo.BANKA);
			saveData("Z_HR_0046", params, tables, saveResult, saveFault);
		}

		private function toJsonType(vo:Object):Object {
			var retObj:Object = new Object;
			for(var field:String in vo) {
				if(vo[field] is Date) {
					retObj[field] = DateUtil.toBasicString(vo[field]);
				}
				else {
					retObj[field] = vo[field];
				}
				trace(retObj[field]);
			}
			return retObj;
		}
		//경조사유변경시 경조금액 조회
		public function corsnMoneySearch(comData:String, subData:String):void
		{
			var param:Object = new Object();
			param["I_CORSN"] = comData;
			param["I_FAMILY"] = subData;

			loadData("Z_HR_0043", param, corsnMoneyResult, corsnMoneyFault);
		}




		///////////////////////////////////////////////////////////////////////////////////////////////////
		//
		//	Event Listeners
		//
		///////////////////////////////////////////////////////////////////////////////////////////////////

		/**
		 * 서버에서 정상적으로 리턴된 결과를 처리
		 *
		 * @param
		 * @return void
		 */
		public function loadResult(event:ResultEvent):void
		{
			if(event.result["RETCODE"]==0) {
				congLoadList = parseCongList(event.result.ITAB);
				facade.sendNotification(CelebrationFacade.LOAD_CONGMONEY_WRITE_COMPLETE, this);
			}
			else {
				trace( "failed to load : (" +event.result["RETCODE"] + ") "+event.result["RETTEXT"]);
				facade.sendNotification(CelebrationFacade.LOAD_CONGMONEY_WRITE_FAILED, this);
			}
		}

		/**
		 * 서버에서 오류가 발생했을 처리
		 *
		 * @param
		 * @return void
		 */
		private function loadFault(event:FaultEvent):void
		{
			facade.sendNotification(CelebrationFacade.LOAD_CONGMONEY_WRITE_FAILED, this);
		}

		/**
		 * 서버에서 정상적으로 리턴된 결과를 처리
		 * 		- 경조사입력
		 * @param
		 * @return void
		 */
		public function saveResult(event:ResultEvent):void
		{
			/*
			if(event.result["RETCODE"]==0) {
				congCorsn = parseCorsn(event.result.FTAB);
				facade.sendNotification(CongMoneyFacade.LOAD_CONGMONEY_SAVE_COMPLETE, this);
			}
			else {
				trace( "failed to load cong: (" +event.result["RETCODE"] + ") "+event.result["RETTEXT"]);
				if(event.result["RETCODE"] == 1 || event.result["RETCODE"] == 2){ //다른 경조휴가 조회됨
					saveErroryMessage = event.result["RETTEXT"];
				} else if(event.result["RETCODE"] == 3){ //다른근태조회(결재중/결재완료)
					saveErroryMessage = "휴가 일이 중복되었습니다. 다시 입력하세요.";
				} else if(event.result["RETCODE"] == 4){ //경조 휴가 신청일 입력 오류
					saveErroryMessage = "경조휴가 신청 날짜를 다시 입력하세요."
				} else if(event.result["RETCODE"] == 5){ //다른 경조휴가 조회됨
					saveErroryMessage = "다른 경조 휴가일과 중복되었습니다. \n 다시입력하세요.";
				} else if(event.result["RETCODE"] > 5) {
					saveErroryMessage = event.result["RETTEXT"];
				}
				facade.sendNotification(CongMoneyFacade.LOAD_CONGMONEY_SAVE_FAILED, this);
			}
				*/
		}

		/**
		 * 서버에서 오류가 발생했을 처리
		 * 		- 경조사입력
		 * @param
		 * @return void
		 */
		private function saveFault(event:FaultEvent):void
		{
			facade.sendNotification(CelebrationFacade.LOAD_CONGMONEY_SAVEFAL_FAILED, this);
		}

		/**
		 * 서버에서 정상적으로 리턴된 결과를 처리
		 * 		- 경조사유금액
		 * @param
		 * @return void
		 */
		public function corsnMoneyResult(event:ResultEvent):void
		{
			if(event.result["RETCODE"]==0) {
				corsnMoney = corsnMoneyList(event.result.FTAB);
				facade.sendNotification(CelebrationFacade.LOAD_CONGMONEY_CORSNMONEY_COMPLETE, this);
			}
			else {
				trace( "failed to load corsnMoney(): (" +event.result["RETCODE"] + ") "+event.result["RETTEXT"]);
				corsnMoneyResultMessage = event.result["RETTEXT"];
				facade.sendNotification(CelebrationFacade.LOAD_CONGMONEY_CORSNMONEY_FAILED, this);
			}
			CursorManager.removeBusyCursor();
		}

		/**
		 * 서버에서 오류가 발생했을 처리
		 * 		- 경조사유금액
		 * @param
		 * @return void
		 */
		private function corsnMoneyFault(event:FaultEvent):void
		{
			trace("Fault message in CongMoneyWriteProxy: " + event.fault.faultString);
			corsnMoneyResultMessage = event.fault["RETTEXT"];
			facade.sendNotification(CelebrationFacade.LOAD_CONGMONEY_CORSNMONEY_FAILED, this);
			CursorManager.removeBusyCursor();
		}


		///////////////////////////////////////////////////////////////////////////////////////////////////
		//
		//	Data Parsing functions
		//
		///////////////////////////////////////////////////////////////////////////////////////////////////
		/**
		 * 서버에서 전달된 result 객체를 분석하여 Value Object를 생성
		 *
		 * @param
		 * @return 경조사조회 현황 ArrayCollection
		 */
		private function parseCongList(recArr:ArrayCollection):CongMoneyWriteVO
		{

			for each(var obj:Object in recArr){
				var vo:CongMoneyWriteVO = new CongMoneyWriteVO();

				vo.GWAREKEY		= obj.GWAREKEY;			//Groupware 전자결재 Key
				vo.CPERNR		= StringUtil.trimFront(obj.CPERNR,"0");//경조대상자 사원 번호
				vo.CNAME		= obj.CNAME;			//대상자이름
				vo.ORGTX		= obj.ORGTX;			//ORGTX
				vo.CODAT		= obj.CODAT; //경조발생일
				vo.CORSN		= obj.CORSN;			//경조사유 코드
				vo.ZTEXT		= obj.ZTEXT;			//경조내역
				vo.COPER		= obj.COPER;			//사유발생자
				vo.COREG		= vo.getPid(obj.COREG);	//주민등록번호 (한국)
				vo.FAMILY		= obj.FAMILY;			//가족코드
				vo.FTEXT		= obj.FTEXT;			//경조 가족관계 텍스트
				vo.BETRG		= obj.BETRG;			//HR 급여관리: 금액
				vo.WAERS		= obj.WAERS;			//통화 키
				vo.BANKL		= obj.BANKL;			//은행 키
				vo.BANKA		= obj.BANKA;			//은행 이름
				vo.BNKSA		= obj.BNKSA;			//은행 계정 정보 레코드 유형
				vo.STEXT		= obj.STEXT;			//하위 유형 이름
				vo.BANKN		= obj.BANKN;			//은행 계정 번호
				vo.EMFTX		= obj.EMFTX;			//예금주 텍스트
				vo.COSEL		= obj.COSEL;			//경조휴가신청여부
				vo.COBEG		= obj.COBEG; //경조휴가시작일
				vo.COEND		= obj.COEND; //경조휴가종료일
				vo.CODYS		= obj.CODYS;			//경조휴가일수
				vo.ZWRTH		= obj.ZWRTH;			//화환 지급여부
				vo.ZWRSP		= obj.ZWRSP;			//화환선지급여부
				vo.PLACE		= obj.PLACE;			//배송처
				vo.REPER		= obj.REPER;			//받는사람
				vo.CNNCT		= obj.CNNCT;			//연락처
				vo.SNDAT		= obj.SNDAT;			//배송일
				vo.ETCTX		= obj.ETCTX;			//비고
				vo.IPERNR		= StringUtil.trimFront(obj.IPERNR,"0");//신청인 사원 번호
				vo.INAME		= obj.INAME;			//신청자이름
				vo.IDATE		= obj.IDATE; //신청일
				vo.WPERNR		= obj.WPERNR;			//결재자 사원 번호
				vo.WNAME		= StringUtil.trimFront(obj.WNAME,"0");//결재자이름
				vo.WSTATUS		= obj.WSTATUS;			//결재진행상태
				vo.WSTATX		= obj.WSTATX;			//결재진행상태명
				vo.BSTATUS		= obj.BSTATUS;			//전표진행상태
				vo.BSTATX		= obj.BSTATX;			//결재진행상태명
				vo.ZFNR			= obj.ZFNR;
			}
			return vo;
		}



		/**
		 * 서버에서 전달된 result 객체를 분석하여 Value Object를 생성
		 *
		 * @param ArrayCollection
		 * @return 계좌선택 콤보 ArrayCollection
		 */
		private function standardListData(srcArr:ArrayCollection):CelebrationCodeVO
		{
			var retArr:ArrayCollection = new ArrayCollection();
			var vo:CelebrationCodeVO;

			for each(var rec:Object in srcArr) {
				vo = new CelebrationCodeVO();

				vo.CORSN 	= rec["CORSN"];
				vo.ZTEXT 	= rec["ZTEXT"];
				vo.FAMILY 	= rec["FAMILY"];
				vo.FTEXT 	= rec["FTEXT"];
				vo.BETRG	= rec["BETRG"];
				vo.ZWRTH 	= rec["ZWRTH"];
				vo.WAERS 	= rec["WAERS"];
			}
			return vo;
		}

		/**
		 * 서버에서 전달된 result 객체를 분석하여 Value Object를 생성
		 *
		 * @param ArrayCollection
		 * @return 경조사유금액 ArrayCollection
		 */
		private function corsnMoneyList(srcArr:ArrayCollection):ConMoneyCorseVO
		{
			var retArr:ArrayCollection = new ArrayCollection();
			var vo:ConMoneyCorseVO = new ConMoneyCorseVO();

			for each(var rec:Object in srcArr) {
				vo = new ConMoneyCorseVO();

				vo.CORSN 	= rec["CORSN"];		//경조사유 코드
				vo.ZTEXT 	= rec["ZTEXT"];		//경조내역
				vo.FAMILY 	= rec["FAMILY"];	//가족코드
				vo.ATEXT 	= rec["ATEXT"];		//경조 가족관계 텍스트
				vo.BETRG	= rec["BETRG"];		//HR 급여관리: 금액
				vo.ZWRTH 	= rec["ZWRTH"];		//화환 지급여부
				vo.WAERS 	= rec["WAERS"];		//통화 키
				vo.CODAY 	= rec["CODAY"];		//경조휴가일수
			}
			return vo;
		}


		private function buildXML():String
		{
			var tmpXML:XML = new XML("<header>"+
						"<line>"+
							"<line_author></line_author>"+
							"<line_reviewer seq='1'></line_reviewer>"+
							"<line_reviewer seq='2'></line_reviewer>"+
							"<line_approver></line_approver>"+
							"<line_docharger></line_docharger>"+
						"</line>"+
						"<inf>"+
						    "<inf_type>HR</inf_type>"+
						    "<inf_formkind>IF_HR_006</inf_formkind>"+
						    "<inf_keycode>__keycode__</inf_keycode>"+
						    "<inf_subject>경조사 품의</inf_subject>"+
						    "<inf_createdt></inf_createdt>"+
						    "<inf_htmlnm>__filename__</inf_htmlnm>"+
						"</inf>"+
					"</header>");
			tmpXML.line.line_author = StringUtil.trimFront(Variables.myPernr, "0");
			tmpXML.line.line_approver = Variables.myBossCode;
			//tmpXML.line.line_docharger = Variables.getModuleManager("CONGMONEY");
			tmpXML.inf.inf_createdt = DateUtil.today();

			return "<?xml version='1.0' encoding='utf-8'?>" + tmpXML.toXMLString();
		}
	}
}